#ifndef BOX_DESCRIPTOR_H_JM_20120814
#define BOX_DESCRIPTOR_H_JM_20120814
/** @file BoxDescriptor.h
 * Popis boxu pre generator textovych modelov vypoctu boboxu.
 **/

// ## C++
#include <vector>
#include <string>
#include <memory>

namespace jm4bbx {
	/** Popis boxu pre generator textovych modelov vypoctu boboxu.
	 * Obsahuje meno boxu a jeho id  pridelene v modele vypoctu (v pripade 
	 * viacnasobneho vyskytu boxu v modele obsahuje vsetky id).
	 **/
	class BoxDescriptor {
	public:
		/// Typ identifikatoru boxu v modele.
		typedef int BoxId;
		/// Typ skupiny-zoznamu id viacnasobneho boxu v modele.
		typedef std::vector<BoxId> BoxIds;

		BoxDescriptor(const std::string& name, const std::string& params) 
			: name_(name)
			, params_(params) { }

		BoxDescriptor(const std::string& name) 
			: name_(name)
			, params_("") { }

		virtual ~BoxDescriptor() { }

		std::string getBoxName() const { return name_; }
		void setBoxName(const std::string& val) { name_ = val; }

		void setBoxParams(const std::string& val) { params_ = val; }
		std::string getBoxParams() const { return params_; }

		BoxIds getBoxIds() const { return boxIds_; }
		BoxId getBoxId() const { return boxIds_[0]; }

		void addBoxId(const BoxId& val) { boxIds_.push_back(val); }
		void clearBoxIds() { boxIds_.clear(); }
	private:
		std::string name_;
		std::string params_;
		BoxIds boxIds_;
	};

	typedef std::shared_ptr<BoxDescriptor> BoxDescriptorPtr;

} // namespace jm4bbx

#endif
